java令牌构造不正确
我正在尝试使用以下代码标记文本文件:
String fileContent = "";
String fileContentTokens[];
try{
fileContent = new Scanner(new File(fname)).useDelimiter("\\Z").next();
} catch(Exception ex) {
System.out.println(ex.getMessage());
}
fileContent = fileContent.replaceAll("\\s*([,.?!\"'()-:*;])\\s*", " $1 ");
//System.out.println(fileContent);
fileContentTokens = fileContent.split(" ");
问题是代词没有正确地形成,我的意思是有些词仍然附有引号,有些词仍然带有撇号。上面的代码应该在每个标点符号之间留有空格,这样就不会附加到单词本身。例如:“That's cool”应该是“That's cool”。但出于某种原因,它没有这样做。它只是为了一些词而不是全部
# 1 楼答案
从Java API:注意,替换字符串中的反斜杠(\)和美元符号($)可能会导致结果不同于将其视为文字替换字符串时的结果;请参见
Matcher.replaceAll
如果需要,使用Matcher.quoteReplacement(java.lang.String)
抑制这些字符的特殊含义# 2 楼答案
在字符串中有另一种类型的撇号,但它失败了
在这个字符串中有
’
但是在正则表达式中有'
这些是不同的。将前撇号也添加到正则表达式中,它将起作用: